﻿CREATE OR REPLACE VIEW pca_pagos.rpt_registros_oficina AS
SELECT
	empresa_id,
	oficina_id,
	CASE WHEN tipo_movimiento_id = 'I' THEN 'INGRESOS'
	     WHEN tipo_movimiento_id = 'E' THEN 'SALIDAS'
	     ELSE 'OTROS'
	END AS tipo_movimiento_id,
	CASE WHEN nombre_subgrupo_movimiento ISNULL THEN nombre_grupo_movimiento
	     ELSE concat(nombre_grupo_movimiento,'/',nombre_subgrupo_movimiento)
	END AS grupo,
	fecha_emision,
	fecha_vencimiento,
	tipo_comprobante,
	strserienumero,
	siglas_moneda,
	monto,
	cancelado,
	fecha_hora_cancelacion
FROM 
	pca_pagos.vw_registros;

CREATE OR REPLACE FUNCTION pca_pagos.fn_get_rpt_registros_oficina(varchar,--empresaId $1
							          varchar,--oficinaId $2
								  date,--fechaInicio $3
								  date,--fechaFin $4
								  int --filtroId $5
								  )RETURNS SETOF pca_pagos.rpt_registros_oficina AS
$$
DECLARE
	_row pca_pagos.rpt_registros_oficina%ROWTYPE;
BEGIN
	IF $5 = 1 THEN --Pagados
		FOR _row IN
			SELECT 
				* 
			FROM
				pca_pagos.rpt_registros_oficina
			WHERE
				empresa_id = $1 AND
				oficina_id = $2 AND
				(fecha_emision BETWEEN $3 AND $4) AND
				cancelado = TRUE
			ORDER BY
				grupo,fecha_emision
		LOOP
			RETURN NEXT _row;
		END LOOP;
	ELSIF $5 = 2 THEN --Pendientes
		FOR _row IN
			SELECT 
				* 
			FROM
				pca_pagos.rpt_registros_oficina
			WHERE
				empresa_id = $1 AND
				oficina_id = $2 AND
				(fecha_emision BETWEEN $3 AND $4) AND
				cancelado = FALSE
			ORDER BY
				grupo,fecha_emision
		LOOP
			RETURN NEXT _row;
		END LOOP;
	ELSIF $5 = 3 THEN --Vencidos
		FOR _row IN
			SELECT 
				* 
			FROM
				pca_pagos.rpt_registros_oficina
			WHERE
				empresa_id = $1 AND
				oficina_id = $2 AND
				(fecha_emision BETWEEN $3 AND $4) AND
				fecha_vencimiento < current_date
			ORDER BY
				grupo,fecha_emision
		LOOP
			RETURN NEXT _row;
		END LOOP;
	ELSE --Todos
		FOR _row IN
			SELECT 
				* 
			FROM
				pca_pagos.rpt_registros_oficina
			WHERE
				empresa_id = $1 AND
				oficina_id = $2 AND
				(fecha_emision BETWEEN $3 AND $4)
			ORDER BY
				grupo,fecha_emision
		LOOP
			RETURN NEXT _row;
		END LOOP;
	END IF;
END;
$$
LANGUAGE plpgsql;